package OOA.com.JavaBasis.outinerclass;
/*
* 局部内部类
* 定义在方法中的类，这个类的生命周期：从方法调用开始，到方法出栈为止。也就是这个局部内部类供这个方法调用。
*
* 使用局部内部类的要求：
* 1.如果内部类是局部内部类，那么类的前面不可以加权限修饰符
* 2.在jdk8之后，局部变量在局部内部类中使用的时候，final是可以省略的
*
*
* 解释为什么局部内部类要使用的变量具备final性质：
* 1.方法被调用是在栈中，运行在栈（栈帧）
* 2.局部内部类的对象运行在堆中
* 3.当方法运行完出栈后，那么局部变量a就会消失；方法结束，可是堆中的对象并不一定消失，为了保证堆中的对象
* 始终可以访问到方法给的值，所以就需要把方法的值设置为final，这样被设置的值就会存到常量池中，不会随着方
* 法的消失而消失。
*
*
* */
public class Out {//外部类
    public void method(){
        //JDK8之后，final可不写，默认就是final，有了final之后a就放在常量池中，不会随着方法的出栈而消失
        final int a = 10;
        class Inner{//局部内部类
            public void method(){
                System.out.println(a);
            }
        }
    }
}
